package com.shg.service.impl;

import java.util.LinkedHashMap;
import java.util.List;

import org.springframework.stereotype.Service;

import com.shg.bean.Admin;
import com.shg.bean.QueryResult;
import com.shg.bean.Roles;
import com.shg.service.AdminService;
import com.shg.web.tools.MD5;

@Service
public class AdminServiceBean extends BasiceDaoImpl<Admin> implements AdminService {

	/**
	 * 后台管理员登录
	 */
	@SuppressWarnings("unchecked")
	public Admin getLogin(Admin admin){
		String sql="from Admin where upper(email)=upper('"+admin.getEmail()
										+"') and passWord='"+MD5.MD5Encode(admin.getPassWord())+"' and state=1";
		List<Admin> list =  sessionFactory.getCurrentSession().createQuery(sql).list();
		if(list.size()>0){
			return list.get(0);
		}else{
			return null;
		}
	
	}
	/**
	 * 分页查询用户
	 * @param firstResult 查询的其实位置
	 * @param maxResult 每页显示的最大记录数据
	 * @return
	 */
	public QueryResult<Admin> queryAdmin(Integer firstResult,Integer maxResult){
		LinkedHashMap<String, String> orderby=new LinkedHashMap<String, String>();
		orderby.put("id", "asc");
		QueryResult<Admin> result = getPagination(Admin.class, firstResult, maxResult, orderby);
		for(Admin admin:result.getResultList()){
			if(admin.getRole()!=null){
				admin.getRole().setName(admin.getRole().getName());
			}
		}
		return result;
	}
	/**
	 * 用户开锁、解锁
	 * @param admin 用户
	 */
	public void updateLock(Admin admin) {
		String sql="update Admin set state="+admin.getState()+" where id="+admin.getId();
		sessionFactory.getCurrentSession().createQuery(sql).executeUpdate();
	}
	/**
	 * 修改管理员的信息
	 */
	public void updateAdmin(Admin admin) {
		String sql="update Admin set name='"+admin.getName()+"',phone='"
						+admin.getPhone()+"',email='"+admin.getEmail()+"',remarks='"
						+admin.getRemarks()+"' where id="+admin.getId();
		sessionFactory.getCurrentSession().createQuery(sql).executeUpdate();
	}
	/**
	 * 修改用户的角色
	 * @param admin用户
	 * @param role 角色
	 */
	public void updateAdminFOrRole(Admin admin,Roles role){
		String sql="update admin set role_id="+(role.getId()==0?null:role.getId())+" where id="+admin.getId();
		sessionFactory.getCurrentSession().createSQLQuery(sql).executeUpdate();
	}
	/**
	 * 查询角色
	 */
	@SuppressWarnings("unchecked")
	public List<Roles> getAdminForRole(Admin admin){
		List<Roles> roles = sessionFactory.getCurrentSession().createQuery("from Roles").list();
		Admin user = (Admin) sessionFactory.getCurrentSession().get(Admin.class, admin.getId());
		for(Roles role:roles){
			if(user.getRole()!=null){
				if(user.getRole().getId()==role.getId()){
					role.setCheck(true);
					break;
				}
			}
		}
		return roles;
	}
}
